package yjj.system.entity;

import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;
import yjj.model.annotation.EmailDomain;
import yjj.model.groups.CreateGroup;
import yjj.model.groups.UpdateGroup;
import yjj.model.web.BaseEntity;

import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import java.time.LocalDateTime;
@Schema(description = "用户实体")
@EqualsAndHashCode(callSuper = true)
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("sys_user")
public class User extends BaseEntity {
    @TableId(type=IdType.ASSIGN_ID)
    @ExcelProperty("用户ID")
    private String userId;
    /**
     * 用户名
     */
    @ExcelProperty("用户名")
    @NotBlank(message = "用户名不能为空", groups = {CreateGroup.class, UpdateGroup.class})
    private String username;

    /**
     * 密码
     */
    @ExcelProperty("密码")
    @NotBlank(message = "密码不能为空", groups = {CreateGroup.class})
    private String password;

    /**
     * 租户ID
     */
    private String tenantId;
    /**
     * 用户昵称
     */
    @ExcelProperty("昵称")
    private String nickname;

    /**
     * 用户头像
     */
    @ExcelProperty("头像")
    private String avatar;

    /**
     * 用户性别
     * 1：男  0：女  2：不愿意透露
     */
    @ExcelProperty("性别")
    private String gender;
    /**
     * 用户状态
     * 1：正常  0：禁用
     */
    @ExcelProperty("状态")
    private String status;

    /**
     * 用户主题
     */
    @ExcelProperty("主题")
    private String theme;
    /**
     * 邮箱
     */
    @ExcelProperty("邮箱")
    @Email(message = "邮箱格式不正确")
    @EmailDomain(allowedDomains = { "@qq.com", "@outlook.com" }, message = "邮箱必须以 @qq.com 或 @outlook.com 结尾")
    private String email;
    /**
     * 手机号码
     */
    @ExcelProperty("手机号码")
    private String phone;
    /**
     * 备注
     */
    @ExcelProperty("备注")
    private String remark;
    /**
     * 密码更新时间
     */
    @ExcelProperty("密码更新日期")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private LocalDateTime passwordUpdateTime;

    /**
     * 注册类型
     *  0 管理员新增，1 用户自助注册
     */
    @ExcelProperty("注册类型")
    private String registerType;

}
